home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / TRANSVID.PAS < prev    next >
Pascal/Delphi Source File  |  1997-03-02  |  10KB  |  317 lines

  1. UNIT TransVid;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Screen routines for protocols                 Last changed: 02.03.97  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-97 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. INTERFACE
  14.  
  15. USES Use32, PoPTypes, OpDate, OpWindow;
  16.  
  17. PROCEDURE ShowCurrentFileName(CONST s: String; sp,fs:LONGINT; Eff:BYTE; w: Boolean);
  18. PROCEDURE ShowErrorCheckingMethod(CONST s: String; w: Boolean);
  19. PROCEDURE ShowBlockSize(b: Word; w: Boolean);
  20. PROCEDURE ShowError(CONST s: String; ErrorMsg, InLog, w: Boolean);
  21. PROCEDURE ShowCurrentByte(b: LongInt; w: Boolean);
  22. PROCEDURE FileReceived(CONST s : String; CONST LogStr: String; w:BOOLEAN);
  23. PROCEDURE FileSent(CONST s: String; CONST LogStr: String; w:BOOLEAN);
  24. PROCEDURE SetupTransferWindows(Dual: Boolean);
  25. PROCEDURE RemoveTransferWindows;
  26. FUNCTION  CrcStr(Crc32: Boolean): S3;
  27.  
  28. IMPLEMENTATION
  29.  
  30. USES OpCrt, OpString,
  31.      OproUtil, Com, StrUtil, LogFile, MailUtil, NetFile, SimpDB,
  32.      Globals, Util;
  33.  
  34. TYPE
  35.   TvVars=RECORD
  36.     errorcount     : ARRAY[False..True] OF Integer;
  37.     UseDualWindows : Boolean;
  38.     FilesInWin,
  39.     FilesOutWin    : WindowPtr;
  40.     CurrentFileWin : ARRAY[False..True] OF WindowPtr;
  41.     StartDateTime  : ARRAY[False..True] OF DateTimeRec;
  42.     EndTime,
  43.     FSize,
  44.     StartPos       : ARRAY[False..True] OF LONGINT;
  45.   END;
  46.  
  47. VAR
  48.  Tv:^TvVars;
  49.  
  50.   PROCEDURE RemoveTransferWindows;
  51.   BEGIN
  52.     WITH Tv^ DO
  53.     BEGIN
  54.       IF UseDualWindows THEN KillWindow(CurrentFileWin[TRUE]);
  55.       KillWindow(CurrentFileWin[FALSE]);
  56.       KillWindow(FilesOutWin);
  57.       KillWindow(FilesInWin);
  58.     END;
  59.     Dispose(Tv);
  60.   END;
  61.  
  62.   PROCEDURE SetupTransferWindows(Dual: Boolean);
  63.   VAR
  64.     b:Boolean;
  65.   BEGIN
  66.     New(Tv);
  67.     WITH Tv^ DO
  68.     BEGIN
  69.       UseDualWindows:=dual;
  70.  
  71.       mywin(filesinwin,3,9,18,18,2,'Files In',False);
  72.       FOR b:=False TO dual DO
  73.       BEGIN
  74.         errorcount[b]:=0;
  75.         StartPos[b]:=0;
  76.         FSize[b]:=0;
  77.         mywin(currentfilewin[b],19,4+(5*Byte(Not dual))+(10*Byte(b)),62,13+(5*BYTE(Not dual))+(10*BYTE(b)),2,
  78.               'Current File',False);
  79.         WITH CurrentFileWin[b]^ DO
  80.         BEGIN
  81.           wFastText('File      :',1,2);
  82.           wFastText('Size      :',2,2);
  83.           wFastText('Time      :              ETA:',3,2);
  84.           wFastText('Transfrd  :              CPS:',4,2);
  85.           wFastText('Block size:',5,2);
  86.           wFastText('Method    :',6,2);
  87.           wFastText('Error #   :',7,2);
  88.           wFastText('Last msg  :',8,2);
  89.         END;
  90.       END;
  91.       mywin(filesoutwin,63,9,78,18,2,'Files Out',False);
  92.     END;
  93.   END;
  94.  
  95.   PROCEDURE ShowNumberOfErrors(w:Boolean);
  96.   BEGIN
  97.     WITH Tv^ DO
  98.     BEGIN
  99.       WITH CurrentFileWin[w]^ DO
  100.       BEGIN
  101.         Select;
  102.         wfastwrite(LongIntForm('##,###,###',errorcount[w]),7,14,cfg.color[2].highlightcolor);
  103.       END;
  104.     END;
  105.   END;
  106.  
  107.   PROCEDURE ShowCurrentFileName(CONST s: String; sp,fs:LONGINT; Eff:BYTE; w:Boolean);
  108.   VAR
  109.     TransTime:LONGINT;
  110.   BEGIN
  111.     WITH Tv^ DO
  112.       WITH Tv^.CurrentFileWin[w]^ DO
  113.       BEGIN
  114.         Select;
  115.         WITH StartDateTime[w] DO
  116.         BEGIN
  117.           t:=CurrentTime;
  118.           d:=Today;
  119.         END;
  120.         wFastWrite(LongIntForm('##,###,###',fs),2,14,cfg.color[2].highlightColor);
  121.         StartPos[w]:=sp;
  122.         FSize[w]:=fs;
  123.         ShowCurrentByte(sp,w);
  124.         ShowBlockSize(0,w);
  125.         errorcount[w]:=0;
  126.         ShowNumberOfErrors(w);
  127.         TransTime:=Trunc((FSize[w]-StartPos[w])/(eff/100)*10/ComPort^.GetBaudRate);
  128.         EndTime[w]:=StartDateTime[w].t+TransTime;
  129.         wfastwrite(TimeToTimeString('hH:mm:ss',TransTime),3,14,cfg.color[2].highlightcolor);
  130.         wfastwrite(TimeToTimeString('hH:mm:ss',TransTime),3,32,cfg.color[2].highlightcolor);
  131.         wFastWrite(CPad(StUpCase(JustFileName(s)),12),1,14,cfg.color[2].HighlightColor);
  132.       END;
  133.     ShowError('',False,false,w);
  134.     IF Sp>0 THEN ShowError('Resuming from '+Long2Str(sp),False,False,w);
  135.   END;
  136.  
  137.   PROCEDURE ShowCurrentByte(b : LongInt; w:Boolean);
  138.   VAR
  139.     CT, EtaTime, CPS : LongInt;
  140.   BEGIN
  141.     WITH Tv^ DO
  142.     BEGIN
  143.       CurrentFileWin[w]^.Select;
  144.       CurrentFileWin[w]^.wfastwrite(LongIntForm('##,###,###',b),4,14,cfg.color[2].highlightcolor);
  145.       CT:=CurrentTime;
  146.       IF CT<StartDateTime[w].t THEN INC(CT,SecondsInDay);
  147.       IF (CT-StartDateTime[w].t)<>0 THEN
  148.         CPS:=(b-StartPos[w]) DIV (CT-StartDateTime[w].t)
  149.       ELSE
  150.         CPS:=0;
  151.       CurrentFileWin[w]^.wfastwrite(LongIntForm('##,###', CPS),4,32,cfg.color[2].highlightcolor);
  152.       EtaTime:=EndTime[w]-CT;
  153.       IF EtaTime>0 THEN
  154.         CurrentFileWin[w]^.wfastwrite(TimeToTimeString('hH:mm:ss',EtaTime),3,32,cfg.color[2].highlightcolor)
  155.       ELSE
  156.         CurrentFileWin[w]^.wfastwrite('Overdue!',3,32,cfg.color[2].highlightcolor);
  157.     END;
  158.   END;
  159.  
  160.   PROCEDURE ShowBlockSize(b : Word; w:Boolean);
  161.   BEGIN
  162.     WITH Tv^ DO
  163.     BEGIN
  164.       CurrentFileWin[w]^.Select;
  165.       CurrentFileWin[w]^.wfastwrite(LongIntForm('    ##,###',b),5,14,cfg.color[2].highlightcolor);
  166.     END;
  167.   END;
  168.  
  169.   PROCEDURE ShowErrorCheckingMethod(CONST s : String; w:Boolean);
  170.   BEGIN
  171.     WITH Tv^ DO
  172.     BEGIN
  173.       CurrentFileWin[w]^.Select;
  174.       CurrentFileWin[w]^.wfastwrite(CPad(s,18),6,14,cfg.color[2].highlightcolor);
  175.     END;
  176.   END;
  177.  
  178.   PROCEDURE ShowError(CONST s: String; ErrorMsg: Boolean; InLog: Boolean; w: Boolean);
  179.   BEGIN
  180.     WITH Tv^ DO
  181.     BEGIN
  182.       CurrentFileWin[w]^.Select;
  183.       IF InLog THEN AddLog('*',s);
  184.       CurrentFileWin[w]^.wfastwrite(CPad(s,28),8,14,cfg.color[2].highlightcolor);
  185.       IF ErrorMsg THEN
  186.       BEGIN
  187.         Inc(errorcount[w]);
  188.         ShowNumberOfErrors(w);
  189.       END;
  190.     END;
  191.   END;
  192.  
  193.   PROCEDURE FileReceived(CONST s : String; CONST LogStr: String; w:BOOLEAN);
  194.   VAR
  195.     Ext:S3;
  196.     RealEndTime  : DateTimeRec;
  197.     Effektivitet : Real;
  198.     Secs,l,Bytes : LongInt;
  199.     Days         : Word;
  200.     Ift          : TInboundFile;
  201.     IftF         : PTitFile;
  202.     IsMail,IsReq : Boolean;
  203.     i            : Integer;
  204.   BEGIN
  205.     WITH Tv^ DO
  206.     BEGIN
  207.       FilesInWin^.Select;
  208.       Inc(StatRec^.DayStat[0].FilesIn);
  209.       WITH RealEndTime DO
  210.       BEGIN
  211.         d:=ToDay;
  212.         t:=CurrentTime;
  213.       END;
  214.       Datetimediff(StartDateTime[w],RealEndTime,days,Secs);
  215.       Bytes:=FSize[w]-StartPos[w];
  216.       IF Secs=0 THEN Secs:=1;
  217.       Effektivitet:=Bytes/Secs/ComPort^.GetBaudRate*1000;
  218.       AddLog('+','CPS: '+Long2Str(Bytes DIV Secs)+' ('+Long2Str(Bytes)+' bytes)  Efficiency: '+Form('###.#',Effektivitet)+'%');
  219.       AddLog('+','Received-'+LogStr+' '+cfg.inbound[GlobNodeStat]+JustFileName(s));
  220.       FilesInWin^.ScrollVert(1);
  221.       FilesInWin^.wfastwrite(StUpCase(s),8,2,cfg.color[2].highlightcolor);
  222.       Inc(FReceived);
  223.  
  224.       IsMail:=FALSE;
  225.       IsReq:=FALSE;
  226.       i:=POS('.',s);
  227.       IF i>0 THEN
  228.       BEGIN
  229.         Ext:=StUpCase(Copy(s,i+1,3));
  230.         IF LENGTH(s)=12 THEN
  231.         BEGIN
  232.           VAL('$'+COPY(s,1,8),l,i);
  233.           IF i=0 THEN
  234.           BEGIN
  235.             IF (Ext='PKT') THEN
  236.               IsMail:=True
  237.             ELSE
  238.               IF (Ext='R'+HexB(Cfg.TaskNumber)) {OR (Ext='PTF')} THEN
  239.                 IsReq:=True
  240.               ELSE
  241.                 IF (Ext[3] IN ['0'..'9']) THEN
  242.                 BEGIN
  243.                   Dec(Ext[0]);
  244.                   IF (POS(Ext,'MO*TU*WE*TH*FR*SA*SU')>0) THEN IsMail:=True;
  245.                 END;
  246.           END; {ELSE
  247.             IF (Ext='TIC') AND (Copy(s,1,2)='TK') THEN IsReq:=True;}
  248.         END;
  249.       END;
  250.       IF NOT IsReq THEN
  251.       BEGIN
  252.         IF IsMail THEN
  253.           GotSomeMail:=True
  254.         ELSE
  255.         BEGIN
  256.           GotSomeFiles:=True;
  257.           IF NOT (((Ext='TIC') {AND (Copy(s,1,2)='TK')}) OR (Ext='PTF')) THEN
  258.           BEGIN
  259.             FillChar(Ift, SizeOf(Ift), 0);
  260.             WITH Ift DO
  261.             BEGIN
  262.               FileName:=JustName(s); {COPY(s+'.',1,POS('.',s)-1);}
  263.               RecvTime:=CurrentTime;
  264.               RecvDate:=Today;
  265.               From:=RemHello.Address;
  266.               TaskNum:=Cfg.TaskNumber;
  267.             END;
  268.             New(IftF, Open(True));
  269.             IF IftF<>NIL THEN
  270.             BEGIN
  271.               IftF^.AddRec(Ift);
  272.               Dispose(IftF, Close);
  273.             END ELSE
  274.               AddLog('!','Not enough memory to open: PORTAL.TIT');
  275.           END;
  276.         END;
  277.       END;
  278.     END;
  279.   END;
  280.  
  281.   PROCEDURE FileSent(CONST s: String; CONST LogStr: String; w:BOOLEAN);
  282.   VAR
  283.     RealEndTime      : DateTimeRec;
  284.     Effektivitet : Real;
  285.     Secs,Bytes   : LongInt;
  286.     Days         : Word;
  287.   BEGIN
  288.     WITH Tv^ DO
  289.     BEGIN
  290.       FilesOutWin^.Select;
  291.       Inc(StatRec^.DayStat[0].FilesOut);
  292.       WITH RealEndTime DO
  293.       BEGIN
  294.         d:=ToDay;
  295.         t:=CurrentTime;
  296.       END;
  297.       Datetimediff(StartDateTime[w], RealEndTime, days, Secs);
  298.       IF Secs=0 THEN Secs:=1;
  299.       Bytes:=FSize[w]-StartPos[w];
  300.       Effektivitet:=Bytes/Secs/ComPort^.GetBaudRate*1000;
  301.  
  302.       AddLog('+','CPS: '+Long2Str(Bytes DIV Secs)+' ('+Long2Str(Bytes)+' bytes)  Efficiency: '+Form('###.#',Effektivitet)+'%');
  303.       AddLog('+','Sent-'+LogStr+' '+s);
  304.  
  305.       filesoutwin^.ScrollVert(1);
  306.       filesoutwin^.wfastwrite(StUpCase(JustFileName(s)),8,2,cfg.color[2].highlightcolor);
  307.       Inc(FSent);
  308.     END;
  309.   END;
  310.  
  311.   FUNCTION CrcStr(Crc32: Boolean): S3;
  312.   BEGIN
  313.     IF Crc32 THEN CrcStr:='/32' ELSE CrcStr:='/16';
  314.   END;
  315.  
  316. END.
  317.